package fr.charlott.core.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.charlott.core.repository.AdresseJpaRepository;
import fr.charlott.core.repository.HotesseJpaRepository;
import fr.charlott.core.repository.model.Hotesse;
import fr.charlott.core.service.HotesseService;

@Service("coreHotesseService")
public class HotesseServiceImpl implements HotesseService {

	private HotesseJpaRepository hotesseJpaRepository;
	
	private AdresseJpaRepository adresseJpaRepository;
	
	public HotesseServiceImpl() {
		super();
	}

	@Autowired
	public HotesseServiceImpl(HotesseJpaRepository hotesseJpaRepository, AdresseJpaRepository adresseJpaRepository) {
		this();
		this.hotesseJpaRepository = hotesseJpaRepository;
		this.adresseJpaRepository = adresseJpaRepository;
	}

	@Override
	@Transactional
	public void ajouterHotesse(Hotesse hotesse) {
		Hotesse hotesseExist = chercherParNomPrenom(hotesse.getNom(), hotesse.getPrenom());
		if (hotesseExist != null) {
			hotesseExist.setAchats(hotesse.getAchats());
			adresseJpaRepository.delete(hotesseExist.getAdresse());
			hotesseExist.setAdresse(hotesse.getAdresse());
			hotesseExist.setCommentaires(hotesse.getCommentaires());
			hotesseExist.setDateDeNaissance(hotesse.getDateDeNaissance());
			hotesseExist.setDerniereVisite(hotesse.getDerniereVisite());
			hotesseExist.setPreferences(hotesse.getPreferences());
			hotesseExist.setProduits(hotesse.getProduits());
			hotesseExist.setTailleBas(hotesse.getTailleBas());
			hotesseExist.setTailleHaut(hotesse.getTailleHaut());
			hotesseJpaRepository.saveAndFlush(hotesseExist);
		}else{
			hotesseJpaRepository.saveAndFlush(hotesse);
		}
	}
	
	@Override
	@Transactional
	public void supprimerHotesse(Hotesse hotesse) {
		hotesseJpaRepository.delete(hotesse);
	}
	
	@Override
	@Transactional
	public void supprimerToutesLesHotesses() {
		hotesseJpaRepository.deleteAll();
	}

	@Override
	@Transactional
	public Hotesse chercherParId(Long id) {
		return hotesseJpaRepository.findOne(id);
	}

	@Override
	@Transactional(readOnly = true)
	public Hotesse chercherParNomPrenom(String nom, String prenom) {
		return hotesseJpaRepository.findByNomAndPrenomAllIgnoreCase(nom, prenom);
	}

	@Override
	@Transactional(readOnly = true)
	public List<Hotesse> chargerToutesLesHotesses() {
		return hotesseJpaRepository.findAll();
	}

	// getters - setters

	/**
	 * @param hotesseJpaRepository
	 *            the hotesseJpaRepository to set
	 */
	public void setHotesseJpaRepository(HotesseJpaRepository hotesseJpaRepository) {
		this.hotesseJpaRepository = hotesseJpaRepository;
	}

}
